#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define debug(x) cerr<<#x<<':'<<x<<endl
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
const int N=4005,mod=999999999;
int n,Q;
int a[N][N];
struct node{
    int tree[N];
    node(){
        memset(tree,0,sizeof(tree));
    }
    int lowbit(int x){
        return x&(-x);
    }
    void add(int x,int v){
        while(x<=n){
            tree[x]+=v;
            x+=lowbit(x);
        }
    }
    int ask(int x){
        int res=0;
        while(x){
            res+=tree[x];
            x-=lowbit(x);
        }
        return res;
    }
}T[N];
signed main(){
    freopen("fire.in","r",stdin);
    freopen("fire.out","w",stdout);
    IOS;
    cin>>n>>Q;
    for(int _=1,tp,dir,i,op,w,p,q;_<=Q;_++){
        cin>>tp;
        if(tp==1){
            cin>>dir>>i>>op>>w;
            if(dir==0){
                if(op==1) for(int j=1;j<=n;j++) T[i].add(j,(a[i][j]&w)-a[i][j]),a[i][j]=(a[i][j]&w);
                if(op==2) for(int j=1;j<=n;j++) T[i].add(j,(a[i][j]|w)-a[i][j]),a[i][j]=(a[i][j]|w);
                if(op==3) for(int j=1;j<=n;j++) T[i].add(j,(a[i][j]^w)-a[i][j]),a[i][j]=(a[i][j]^w);
                if(op==4) for(int j=1;j<=n;j++) T[i].add(j,(a[i][j]+w)%mod-a[i][j]),a[i][j]=(a[i][j]+w)%mod;
            }
            else{
                if(op==1) for(int j=1;j<=n;j++) T[j].add(i,(a[j][i]&w)-a[j][i]),a[j][i]=(a[j][i]&w);
                if(op==2) for(int j=1;j<=n;j++) T[j].add(i,(a[j][i]|w)-a[j][i]),a[j][i]=(a[j][i]|w);
                if(op==3) for(int j=1;j<=n;j++) T[j].add(i,(a[j][i]^w)-a[j][i]),a[j][i]=(a[j][i]^w);
                if(op==4) for(int j=1;j<=n;j++) T[j].add(i,(a[j][i]+w)%mod-a[j][i]),a[j][i]=(a[j][i]+w)%mod;
            }
        }
        else{
            cin>>p>>q;
            int ans=0;
            for(int i=1;i<=p;i++) ans+=T[i].ask(q);
            cout<<ans<<endl;
        }
    }
    return 0;
}